package seqList.LeetCode;
/**
 * LeetCode第203题- 移除链表元素
 */
public class num203 {

    //方法二，递归
    public ListNode removeElements(ListNode head, int val) {
        if (head == null) {
            return null;
        }
        // 将head.next以及之后的节点处理不了，交给removeElements(head.next,val)
        head.next = removeElements(head.next,val);
        // 自己处理下头节点
        if (head.val == val) {
            return head.next;
        }
        return head;
    }
    //    方法一:
    // 删除当前链表中所有值为val的节点,返回删除后链表的头节点
//    public ListNode removeElements(ListNode head, int val) {
//        // 头节点就是待删除的节点
//        while (head != null && head.val == val) {
//            head = head.next;
//        }
//        if (head == null) {
//            return null;
//        }else {
//            // 此时头节点一定不是待删除节点且链表不为空
//            ListNode prev = head;
//            while (prev.next != null) {
//                if (prev.next.val == val) {
//                    ListNode cur = prev.next;
//                    prev.next = cur.next;
//                }else {
//                    // 只有当prev.next.val != val
//                    prev = prev.next;
//                }
//            }
//        }
//        return head;
//    }
}
